#pragma once

#include <QMainWindow>
#include <QtCore>
#include <QtGui>
#include <QtWidgets>
#include <optional>
#include <qrcodegencpp/qrcodegen.hpp>

#include "ImagePreviewArea.hpp"
#include "ParamSetDialog.hpp"
#include "WifiInfoInputEdit.hpp"

class QRCodeGeneratorWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit QRCodeGeneratorWindow(QMainWindow *parent = nullptr);

private slots:
    void updatePreviewArea();
    void clearInput();
    void saveAsPng();

private:
    // 预览区域
    ImagePreviewArea *previewArea;

    // 文本编码模式的控件
    QTextEdit *inputTextEditor; // 文本输入框

    // WIFI 编码模式的控件
    WifiInfoInputEdit *wifiInfoInputEdit; // Wifi信息输入控件

    // 文本编码、WIFI编码切换
    QRadioButton *textModeRadio; // 文本编码模式
    QRadioButton *wifiModeRadio; // WIFI编码模式

    // 底部控制按钮
    QPushButton *settingsButton; // 参数设置按钮，点击后打开设置界面
    QPushButton *clearButton;    // 刷新按钮
    QPushButton *saveButton;     // 保存按钮

    // 参参数设置页面
    ParamSetDialog *paramSetDialog; // 参数设置对话框

    // 底部状态栏
    QStatusBar *statusBar;

    void setupUI();
    std::optional<qrcodegen::QrCode>
           generateQrCodeObject(const char            *text,
                                qrcodegen::QrCode::Ecc eccLevel);
    QImage renderQrCode(const qrcodegen::QrCode &qrCode,
                        int                      pixelSize,
                        int                      borderSize);
};
